#include "Int_MatrixKey.h"
void Int_Buzzer_Buzz(void)
{
    unsigned char counter = 100;

    while (counter) {
        BUZZ = ~BUZZ;
        Delay1ms(1);
        --counter;
    }
}


unsigned char Int_MatrixKey_CheckKey(void)
{
    //    P24 P25 P26 P27
    // P20 +---+---+---+
    // P21 +---+---+---+
    // P22 +---+---+---+
    // P23 +---+---+---+

    // 扫描第一行，将P20置0，其余置1；P27-P20依次为：1111 1110
    P2 = 0xFE;

    // 检测第SW5是否被按下，若被按下，P24会被拉低，P27-P20依次为：1110 1110
    if (P2 == 0xEE) {
        Delay1ms(10);
        if (P2 == 0xEE) {
            while (P2 == 0xEE);
            Int_Buzzer_Buzz();
            return 1;
        }
    }

    // 检测第SW6是否被按下，若被按下，P25会被拉低，P27-P20依次为：1101 1110
    if (P2 == 0xDE) {
        Delay1ms(10);
        if (P2 == 0xDE) {
            while (P2 == 0xDE);
            Int_Buzzer_Buzz();
            return 2;
        }
    }

    // 检测第SW7是否被按下，若被按下，P26会被拉低，P27-P20依次为：1011 1110
    if (P2 == 0xBE) {
        Delay1ms(10);
        if (P2 == 0xBE) {
            while (P2 == 0xBE);
            Int_Buzzer_Buzz();
            return 3;
        }
    }

    // 检测第SW8是否被按下，若被按下，P28会被拉低，P27-P20依次为：0111 1110
    if (P2 == 0x7E) {
        Delay1ms(10);
        if (P2 == 0x7E) {
            while (P2 == 0x7E);
            Int_Buzzer_Buzz();
            return 11;
        }
    }

    // 扫描第二行，将P22置0，其余置1；P27-P20依次为：1111 1101
    P2 = 0xFD;
    // 检测第SW9是否被按下，若被按下，P24会被拉低，P27-P20依次为：1110 1101
    if (P2 == 0xED) {
        Delay1ms(10);
        if (P2 == 0xED) {
            while (P2 == 0xED);
            Int_Buzzer_Buzz();
            return 4;
        }
    }

    // 检测第SW10是否被按下，若被按下，P25会被拉低，P27-P20依次为：1101 1101
    if (P2 == 0xDD) {
        Delay1ms(10);
        if (P2 == 0xDD) {
            while (P2 == 0xDD);
            Int_Buzzer_Buzz();
            return 5;
        }
    }

    // 检测第SW11是否被按下，若被按下，P26会被拉低，P27-P20依次为：1011 1101
    if (P2 == 0xBD) {
        Delay1ms(10);
        if (P2 == 0xBD) {
            while (P2 == 0xBD);
            Int_Buzzer_Buzz();
            return 6;
        }
    }

    // 检测第SW12是否被按下，若被按下，P28会被拉低，P27-P20依次为：0111 1101
    if (P2 == 0x7D) {
        Delay1ms(10);
        if (P2 == 0x7D) {
            while (P2 == 0x7D);
            Int_Buzzer_Buzz();
            return 12;
        }
    }

    // 扫描第三行，将P22置0，其余置1；P27-P20依次为：1111 1011
    P2 = 0xFB;
    // 检测第SW13是否被按下，若被按下，P24会被拉低，P27-P20依次为：1110 1011
    if (P2 == 0xEB) {
        Delay1ms(10);
        if (P2 == 0xEB) {
            while (P2 == 0xEB);
            Int_Buzzer_Buzz();
            return 7;
        }
    }

    // 检测第SW14是否被按下，若被按下，P25会被拉低，P27-P20依次为：1101 1011
    if (P2 == 0xDB) {
        Delay1ms(10);
        if (P2 == 0xDB) {
            while (P2 == 0xDB);
            Int_Buzzer_Buzz();
            return 8;
        }
    }

    // 检测第SW15是否被按下，若被按下，P26会被拉低，P27-P20依次为：1011 1011
    if (P2 == 0xBB) {
        Delay1ms(10);
        if (P2 == 0xBB) {
            while (P2 == 0xBB);
            Int_Buzzer_Buzz();
            return 9;
        }
    }

    // 检测第SW16是否被按下，若被按下，P28会被拉低，P27-P20依次为：0111 1011
    if (P2 == 0x7B) {
        Delay1ms(10);
        if (P2 == 0x7B) {
            while (P2 == 0x7B);
            Int_Buzzer_Buzz();
            return 13;
        }
    }

    // 扫描第四行，将P23置0，其余置1；P27-P20依次为：1111 0111
    P2 = 0xF7;
    // 检测第SW17是否被按下，若被按下，P24会被拉低，P27-P20依次为：1110 0111
    if (P2 == 0xE7) {
        Delay1ms(10);
        if (P2 == 0xE7) {
            while (P2 == 0xE7);
            Int_Buzzer_Buzz();
            return 21;
        }
    }

    // 检测第SW18是否被按下，若被按下，P25会被拉低，P27-P20依次为：1101 0111
    if (P2 == 0xD7) {
        Delay1ms(10);
        if (P2 == 0xD7) {
            while (P2 == 0xD7);
            Int_Buzzer_Buzz();
            return 0;
        }
    }

    // 检测第SW19是否被按下，若被按下，P26会被拉低，P27-P20依次为：1011 0111
    if (P2 == 0xB7) {
        Delay1ms(10);
        if (P2 == 0xB7) {
            while (P2 == 0xB7);
            Int_Buzzer_Buzz();
            return 22;
        }
    }

    // 检测第SW20是否被按下，若被按下，P28会被拉低，P27-P20依次为：0111 0111
    if (P2 == 0x77) {
        Delay1ms(10);
        if (P2 == 0x77) {
            while (P2 == 0x77);
            Int_Buzzer_Buzz();
            return 33;
        }
    }
    return 99;
}
